package w83b.w83bOperacionesPaso.w83bComunicaciones;

import java.util.HashMap;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import w83b.w83bBeans.W83bComunicacionesBean;
import w83b.w83bBeans.W83bPlantillasBean;
import w83b.w83bBeans.W83bUsuarioXLNetsBean;
import w83b.w83bUtilidades.W83bUtilidadesComunes;
import w83b.w83bUtilidades.W83bUtilidadesRTF;
import w83b.w83bUtilidadesComunes.W83bClsConstantes;
import w83b.w83bUtilidadesComunes.W83bUtilidades;
import es.ejie.frmk.presentacion.operacion.paso.Q70ActionPasoOP;
import es.ejie.frmk.presentacion.sesiondatos.Q70ContextoEJIE;

public class W83bGenerarRtfCartaAction extends Q70ActionPasoOP{


	
	protected void processOP(Q70ContextoEJIE contexto, ActionErrors errores, ActionMapping mapping,
			ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		
	}

	protected ActionForward processForward(Q70ContextoEJIE contexto, ActionErrors errors, ActionMapping mapping, 
		ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
	
			//String strRutaRtf ="";
			HashMap mapaPar = new HashMap();
			List comunicacion=(List)contexto.get("w83bResultadoBean");
		   // strRutaRtf = Q70ListenerUtils.getApplicationProperty("RUTA_PLANTILLAS_RTF")+"plantillaCartasCitacion.rtf";
		    String idioma = (String)contexto.get(W83bClsConstantes.CONSTANTE_CONTEXTO_IDIOMA);
		       
			W83bUsuarioXLNetsBean usuario = (W83bUsuarioXLNetsBean)contexto.get(W83bClsConstantes.CONSTANTE_CONTEXTO_USUARIO);
		    
		    HashMap datosDelDep=  W83bUtilidadesComunes.obtenerTitulosDelegacionDepartamento(usuario,idioma);
		    StringBuffer  tituloDelelegacionEu = (StringBuffer)datosDelDep.get("tituloDelelegacionEu");
			StringBuffer  tituloDelelegacionEs = (StringBuffer)datosDelDep.get("tituloDelelegacionEs");
			StringBuffer  tituloDepEu = (StringBuffer)datosDelDep.get("tituloDepEu");
			StringBuffer  tituloDepEs = (StringBuffer)datosDelDep.get("tituloDepEs");
			
		  
		//se rellenan los datos que se van a repetir continuamente para no tener que rellenar por cada elemento
		
		HashMap mapaParGeneral = new HashMap();
		
		mapaParGeneral.put("<<DEPEUS>>",tituloDepEu.toString());
		mapaParGeneral.put("<<DEPCAS>>",tituloDepEs.toString());
		mapaParGeneral.put("<<DELEUS>>",tituloDelelegacionEu.toString());
		mapaParGeneral.put("<<DELCAS>>",tituloDelelegacionEs.toString());
		mapaPar.put("<<finrep>>","");
		mapaPar.put("<<iniciorep>>","");
//		CharSequence content=W83bUtilidadesRTF.leerTodoFichero(strRutaRtf);
		HashMap mapaPlantillas = (HashMap)contexto.get("w83bPlantillasMap");
		byte[] plantilla = ((W83bPlantillasBean)mapaPlantillas.get(W83bClsConstantes.CARTAS.toUpperCase())).getFichero();
		
		CharSequence content=W83bUtilidadesRTF.leerTodoFichero(plantilla);
		
		String contenido=content.toString();
		StringBuffer contenidoBuffer=new StringBuffer(contenido);
		contenido=W83bUtilidadesRTF.sustituirCadenaCaracteresString(contenidoBuffer, mapaParGeneral).toString();
		
		int y=contenido.lastIndexOf("footer");
		int z=contenido.lastIndexOf("page");
		
		
		y=contenido.substring(y,contenido.length()).indexOf("}}")+2+y;
		
		z=contenido.substring(z,contenido.length()).indexOf("}")+1+z;
		
		String parteDelanteLimpia=contenido.substring(0,y);
		String parteAtrasLimpia=contenido.substring(z,contenido.length());
		contenidoBuffer=new StringBuffer(contenido.substring(y,z));
		StringBuffer datos=new StringBuffer();
		// se aņade la parte delantera del documento.
		datos.append(parteDelanteLimpia);
		StringBuffer elemento=new StringBuffer(W83bClsConstantes.CUARENTA);
		String cp="";
		String munic="";
		for(int i=0;i<comunicacion.size()-1;i++)
		{
			W83bComunicacionesBean comunic=(W83bComunicacionesBean)comunicacion.get(i);
			mapaPar.put("<<RAZON>>",comunic.getRazon());
			String domicilio="";
			if (W83bClsConstantes.CONSTANTE_NO_VALIDADA.equals(comunic.getCentroSel())||StringUtils.isEmpty(comunic.getMunorig())){
				domicilio=W83bUtilidades.convertirAVasioSiNulo(comunic.getDomicilio());
			}
			else{
				domicilio=W83bUtilidades.convertirAVasioSiNulo(comunic.getDirorig());
			}
			if (" ".equals(W83bUtilidades.convertirAVasioSiNulo(domicilio))){
				mapaPar.put("<<DOMIC>>","".trim());
			}
			else{
				mapaPar.put("<<DOMIC>>",W83bUtilidades.convertirAVasioSiNulo(domicilio));
			}
			if (W83bClsConstantes.CONSTANTE_NO_VALIDADA.equals(comunic.getCentroSel())||StringUtils.isEmpty(comunic.getCporig())){
				cp=comunic.getCodigopostal();
			}
			else{
				cp=comunic.getCporig();
			}
			mapaPar.put("<<CPOST>>",cp);
			
			munic=W83bUtilidades.convertirAVasioSiNulo(comunic.getMunicipio());
			
			if (!("").equals(cp.trim())&&!("").equals(munic.trim())){
				mapaPar.put("<<LOCAL>>","-"+munic);
			}
			else{
				mapaPar.put("<<LOCAL>>",munic);
			}
			mapaPar.put("<<PROV>>",comunic.getProvincia());
				
			elemento=W83bUtilidadesRTF.sustituirCadenaCaracteresString(contenidoBuffer, mapaPar);
			datos.append(elemento);
		}
					
		//para que la ultima pagina no salga vacia quitamos el ultimo salto de pagina
			
		int i=datos.lastIndexOf("page");
		String delante=datos.substring(0,i);
		String detras=datos.substring(i,datos.length());
		String delanteL=delante.substring(0, delante.lastIndexOf("{"));
		String detrasL=detras.substring( detras.indexOf("}")+1,detras.length());
		datos=new StringBuffer(delanteL.concat(detrasL));
			
			
			
		//para cerrar el contenido del documento metemos la parte trasera.
		datos.append(parteAtrasLimpia);
			
	    response.setContentType("application/msword");
	    response.setContentLength(datos.toString().getBytes().length);
	    if ("preaviso".equals(comunicacion.get(comunicacion.size()-1))){
	    	response.setHeader("Content-disposition","attachment;filename=CartasPreavisos.rtf");
        }else if ("comempresas".equals(comunicacion.get(comunicacion.size()-1))){
        	response.setHeader("Content-disposition","attachment;filename=CartasComunicacionEmpresas.rtf");
		}
	    response.getOutputStream().write(datos.toString().getBytes());
	    response.getOutputStream().flush();

			
		return null;
	}

}
	


